﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tecnosop.Dominio;
using System.ComponentModel;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;

namespace Tecnosop.WebUI.Models
{
    public class FacturaConvenioViewModel
    {
        public int NUMERO_FACTURA { get; set; }
        public string RAZON_SOCIAL { get; set; }
        public int NUMERO_CONVENIO { get; set; }

        public CONVENIO CONVENIO { get; set; }
        public FACTURA FACTURA { get; set; }

        [DisplayFormat(DataFormatString = "$ {0:#,##}", ApplyFormatInEditMode = true, NullDisplayText = "$ 0")]
        public int TOTAL_FACTURA { get; set; }

        public IEnumerable<DetalleFacturaConvenioViewModel> DetalleFactura { get; set; }
    }

    public class DetalleFacturaConvenioViewModel
	{
        //[HiddenInput(DisplayValue = false)]
        //public int NUMERO_FACTURA { get; set; }

        //[HiddenInput(DisplayValue = false)]
        //public string RAZON_SOCIAL { get; set; }

        [DisplayName("Número detalle")]
        public int NUMERO_LINEA_DETALLE { get; set; }

        public int? Numero_equipo_en_convenio { get; set; }

        [DisplayName("Descripción")]
        public string DESCRIPCION_LINEA { get; set; }

        public DetalleLineaMedicionViewModel? DescripcionLinea { get; set; }

        [DisplayName("Subtotal")]
        [DataType(DataType.Currency)]
        public decimal SUBTOTAL { get; set; }

        [DisplayName("Cantidad")]
        public int? CANTIDAD { get; set; }

        [DisplayName("Precio")]
        [DataType(DataType.Currency)]
        [DisplayFormat(DataFormatString = "$ {0:#,##}", ApplyFormatInEditMode = true, NullDisplayText = "$ 0")]
        public decimal PRECIO { get; set; }
	}

    public struct DetalleLineaMedicionViewModel
    {
        //public string Numero_serie_equipo_en_convenio { get; set; }
        public int Consignacion_equipo { get; set; }
        public string Direccion_equipo_en_convenio { get; set; }

        public int Contador_anterior { get; set; }
        public DateTime? Fecha_medicion_anterior { get; set; }

        public int Contador_actual { get; set; }
        public DateTime Fecha_medicon_actual { get; set; }
        
        public int minimoGarantizado { get; set; }
        public bool Medicion_BN { get; set; }
        public bool EnUF { get; set; }
    }

    public class ModificacionDetalleFacturaConvenioViewModel
    {
        [DisplayName("Número de factura")]
        public int NUMERO_FACTURA { get; set; }

        [DisplayName("Razón social")]
        public string RAZON_SOCIAL { get; set; }

        public FACTURA_CONVENIO Factura { get; set; }

        [DisplayName("Número convenio")]
        public int NUMERO_CONVENIO { get; set; }
        public CONVENIO Convenio { get; set; }

        public IEnumerable<MEDICIONES> MedicionesNoFacturadas { get; set; }

        public MedicionViewModel DetalleMedicion { get; set; }

        public IEnumerable<AgregarCargoFijoViewModel> EquiposCargosFijos { get; set; }
    }

    public class MedicionViewModel
    {
        [HiddenInput(DisplayValue = false)]
        public int NUMERO_FACTURA { get; set; }

        [HiddenInput(DisplayValue = false)]
        public string RAZON_SOCIAL { get; set; }

        public bool MEDICION_BN { get; set; }

        [DisplayName("Id Medición")]
        [HiddenInput(DisplayValue = true)]
        //[ReadOnly(true)]
        public int ID_MEDICION { get; set; }

        [DisplayName("Contador anterior")]
        [HiddenInput(DisplayValue = true)]
        public int CONTADOR_ANTERIOR { get; set; }

        [DisplayName("Diferencia")]
        [HiddenInput(DisplayValue = true)]
        public int DIFERENCIA { get; set; }

        [DisplayName("No facturado")]
        [HiddenInput(DisplayValue = true)]
        public int CANTIDAD_NO_FACTURADA { get; set; }

        [DisplayName("Facturado")]
        [HiddenInput(DisplayValue = true)]
        public int CANTIDAD_FACTURADA { get; set; }

        [DisplayName("Fecha medición")]
        [HiddenInput(DisplayValue = true)]
        //[ReadOnly(true)]
        public DateTime FECHA_MEDICION { get; set; }

        [DisplayName("Cantidad a facturar")]
        [UIHint("Numero")]
        [Required(ErrorMessage = "Ingrese la cantidad a facturar")]
        public int CANTIDAD_A_FACTURAR { get; set; }

        [DisplayName("Marcar como facturada")]
        public bool MEDICION_FACTURADA { get; set; }

        [DisplayName("Mín. garantizado")]
        [HiddenInput(DisplayValue = true)]
        public int MINIMO_GARANTIZADO { get; set; }

        [DisplayName("Precio x hoja")]
        [DisplayFormat(DataFormatString = "$ {0:#,##}", ApplyFormatInEditMode = true, NullDisplayText = "$ 0")]
        [HiddenInput(DisplayValue = true)]
        public decimal PRECIO_POR_HOJA { get; set; }
    }

    public class AgregarCargoFijoViewModel
	{
        [DisplayName("Número equipo en convenio")]
        public int ID_EQUIPO_EN_CONVENIO { get; set; }

        [DisplayName("Monto cargo fijo")]
        [DisplayFormat(DataFormatString = "$ {0:#,##}", ApplyFormatInEditMode = true, NullDisplayText = "$ 0")]
        [DataType(DataType.Currency)]
        public int? MONTO_CARGO_FIJO { get; set; }

        [DisplayName("Marca")]
        public string MARCA_EQUIPO { get; set; }

        [DisplayName("Modelo")]
        public string MODELO_EQUIPO { get; set; }

        [DisplayName("Tipo")]
        public string TIPO_EQUIPO { get; set; }

        [DisplayName("Codigo de consignación")]
        public int CONSIGNACION { get; set; }
	}

    public class CreateFacturaConvenioViewModel
    {
        public FACTURA Factura { get; set; }
        public CLIENTE Cliente { get; set; }

        [DisplayName("Elija el convenio del cual desea facturar")]
        public IEnumerable<CONVENIO> Convenios { get; set; }
    }

    public class EditFacturaConvenioViewModel
    {
        public int id { get; set; }

        public string RazonSocial { get; set; }

        public FacturaInsiderViewModel Factura { get; set; }
    }

    public class CreateFacturaConvenioPOSTViewModel
    {
        public int id { get; set; }

        public string RutCliente { get; set; }

        public bool razon { get; set; }

        [Required(ErrorMessage = "Elija un convenio.")]
        public int NumeroConvenio { get; set; }

        public FacturaInsiderViewModel Factura { get; set; }
    }

    public class AgregarMedicionesViewModel
    {
        public IEnumerable<MEDICIONES> Mediciones { get; set; }

        public int NUMERO_FACTURA { get; set; }

        public string RAZON_SOCIAL { get; set; }

        public int NUMERO_CONVENIO { get; set; }
    }
}